From 89ea4f250eb3d629067ae30d4c8d1e8d8b9bc801 Mon Sep 17 00:00:00 2001 From: PacketFiend Date: Wed, 12 Apr 2023 08:51:32 -0400 Subject: [PATCH] #1062 Fix core dump when merging tracks with disparate IGC extensions (#1063) * #1062 Fix core dump when merging tracks with disparate IGC extensions * Reduce `value` variable scope when writing SimpleArrays * Debug oopsie bugfix, fix core dump when merging IGC files with no extensions * Collapse redundant if statement * Fix brain fart * Eliminate igc_fsdata::has_value() --- kml.cc | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/kml.cc b/kml.cc index faa550abd..978b88071 100644 --- a/kml.cc +++ b/kml.cc @@ -1505,14 +1505,22 @@ void KmlFormat::kml_mt_simple_array(const route_head* header, case wp_field::igc_fxa: case wp_field::igc_gfo: case wp_field::igc_siu: - case wp_field::igc_acz: { - double value = fs_igc->get_value(member).value(); - if (global_opts.debug_level >= 6) { - printf(MYNAME ": Writing KML SimpleArray data: %s of %f\n", name, value); + case wp_field::igc_acz: + if (fs_igc && fs_igc->get_value(member).has_value()) { + double value = fs_igc->get_value(member).value(); + if (global_opts.debug_level >= 6) { + printf(MYNAME ": Writing KML SimpleArray data: %s of %f\n", name, value); + } + writer->writeTextElement(QStringLiteral("gx:value"), QString::number(value)); + // No igc_fsdata present, but we still need to write out the SimpleArray. + // This can happen when merging tracks with different sets of IGC extensions. + } else { + if (global_opts.debug_level >= 7) { + printf(MYNAME ": Writing empty KML SimpleArray data for %s\n", name); + } + writer->writeTextElement(QStringLiteral("gx:value"), QString()); } - writer->writeTextElement(QStringLiteral("gx:value"), QString::number(value)); break; - } default: fatal("Bad member type"); } -- 2.30.2